home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / dev / net.h < prev    next >
C/C++ Source or Header  |  1988-06-21  |  7KB  |  201 lines

  1. /*
  2.  * net.h --
  3.  *
  4.  *    This file defines the device-dependent I/O control commands and
  5.  *    related structures for 4.3 BSD Unix socket emulation.
  6.  *
  7.  * Copyright 1987 Regents of the University of California
  8.  * All rights reserved.
  9.  * Permission to use, copy, modify, and distribute this
  10.  * software and its documentation for any purpose and without
  11.  * fee is hereby granted, provided that the above copyright
  12.  * notice appear in all copies.  The University of California
  13.  * makes no representations about the suitability of this
  14.  * software for any purpose.  It is provided "as is" without
  15.  * express or implied warranty.
  16.  *
  17.  * $Header: net.h,v 1.1 88/06/21 12:07:44 ouster Exp $ SPRITE (Berkeley)
  18.  */
  19.  
  20. #ifndef _NET_IOC
  21. #define _NET_IOC
  22.  
  23. #include "sprite.h"
  24. #include "netInet.h"
  25.  
  26. #define IOC_NET (4<<16)
  27.  
  28. /*
  29.  * The I/O control commands:
  30.  *  IOC_NET_LISTEN        - make into a passive socket.
  31.  *  IOC_NET_ACCEPT_CONN_1    - accept a pending connection request.
  32.  *  IOC_NET_ACCEPT_CONN_2    - change a new socket in the connect request.
  33.  *  IOC_NET_GET_LOCAL_ADDR    - get the local <address, port> of the socket.
  34.  *  IOC_NET_SET_LOCAL_ADDR    - set the local <address, port> of the socket.
  35.  *  IOC_NET_CONNECT        - try to connect to a remote host.
  36.  *  IOC_NET_GET_REMOTE_ADDR    - get the remote <address,port> of the socket.
  37.  *  IOC_NET_GET_OPTION        - get the current value of an option.
  38.  *  IOC_NET_SET_OPTION        - set the value of an option.
  39.  *  IOC_NET_RECV_FLAGS        - flags to modify behavior of next read.
  40.  *  IOC_NET_RECV_FROM        - <address,port> of last read packet.
  41.  *  IOC_NET_SEND_INFO        - flags to modify behavior of next write.
  42.  *  IOC_NET_SHUTDOWN        - shutdown the socket.
  43.  *  IOC_NET_SET_PROTOCOL    - change the protocol for a socket.
  44.  *  IOC_NET_IS_OOB_DATA_NEXT    - returns TRUE if out-of-band data will be
  45.  *                  read by the next read call.
  46.  *  IOC_NET_STATS        - turn on/off statistics collection.
  47.  *
  48.  */
  49.  
  50. #define IOC_NET_LISTEN            (IOC_NET | 1)
  51. #define IOC_NET_ACCEPT_CONN_1        (IOC_NET | 2)
  52. #define IOC_NET_ACCEPT_CONN_2        (IOC_NET | 3)
  53. #define IOC_NET_GET_LOCAL_ADDR        (IOC_NET | 4)
  54. #define IOC_NET_SET_LOCAL_ADDR        (IOC_NET | 5)
  55. #define IOC_NET_CONNECT            (IOC_NET | 6)
  56. #define IOC_NET_GET_REMOTE_ADDR        (IOC_NET | 7)
  57. #define IOC_NET_GET_OPTION        (IOC_NET | 8)
  58. #define IOC_NET_SET_OPTION        (IOC_NET | 9)
  59. #define IOC_NET_RECV_FLAGS        (IOC_NET | 10)
  60. #define IOC_NET_RECV_FROM        (IOC_NET | 11)
  61. #define IOC_NET_SEND_INFO        (IOC_NET | 12)
  62. #define IOC_NET_SHUTDOWN        (IOC_NET | 13)
  63. #define IOC_NET_SET_PROTOCOL        (IOC_NET | 14)
  64. #define IOC_NET_IS_OOB_DATA_NEXT    (IOC_NET | 15)
  65. #define IOC_NET_STATS            (IOC_NET | 16)
  66.  
  67. /*
  68.  * Types of sockets:  (same as 4.3BSD)
  69.  *
  70.  *    NET_SOCK_STREAM        - reliable byte stream, connection-based.
  71.  *    NET_SOCK_DGRAM        - unreliable datagram.
  72.  *    NET_SOCK_RAW        - access to raw protocol interface.
  73.  *    NET_SOCK_RDM        - reliably-delivered message.
  74.  *    NET_SOCK_SEQPACKET    - sequenced packet stream.
  75.  *
  76.  * (These values are from 4.3BSD's <sys/socket.h> file.)
  77.  */
  78.  
  79. #define NET_SOCK_STREAM        1
  80. #define NET_SOCK_DGRAM        2
  81. #define NET_SOCK_RAW        3
  82. #define NET_SOCK_RDM        4
  83. #define NET_SOCK_SEQPACKET    5
  84.  
  85. /*
  86.  * The maximum number of connections that can be queued for a stream
  87.  * socket. This value is used with IOC_NET_LISTEN.
  88.  */
  89. #define NET_MAX_NUM_CONNECTS    5
  90.  
  91. /*
  92.  * The level number for a socket when using IOC_NET_GET_OPTION and 
  93.  * IOC_NET_SET_OPTION.
  94.  */
  95.  
  96. #define NET_OPT_LEVEL_SOCKET    0xffff
  97.  
  98. /*
  99.  * Option names for IOC_NET_GET_OPTION / SET_OPTION ioctls.
  100.  *
  101.  * Note: These values must match the SO_ values defined in the 4.3BSD
  102.  * <sys/socket.h> file.
  103.  *
  104.  *   NET_OPT_DEBUG         - Turn on debugging info recording.
  105.  *   NET_OPT_REUSE_ADDR        - Allow local address reuse.
  106.  *   NET_OPT_KEEP_ALIVE        - Keep connections alive.
  107.  *   NET_OPT_DONT_ROUTE        - Just use interface addresses.
  108.  *   NET_OPT_BROADCAST        - Permit sending of broadcast msgs.
  109.  *   NET_OPT_USE_LOOPBACK    - Bypass hardware when possible.
  110.  *   NET_OPT_LINGER        - Linger on close if data present.
  111.  *   NET_OPT_OOB_INLINE        - Leave received OOB data in line.
  112.  *   NET_OPT_SEND_BUF_SIZE    - Send buffer size.
  113.  *   NET_OPT_RECV_BUF_SIZE    - Receive buffer size.
  114.  *   NET_OPT_SEND_LOWAT        - Send low-water mark.
  115.  *   NET_OPT_RECV_LOWAT        - Receive low-water mark.
  116.  *   NET_OPT_SEND_TIMEOUT    - Send timeout.
  117.  *   NET_OPT_RECV_TIMEOUT    - Receive timeout.
  118.  *   NET_OPT_ERROR        - Get error status and clear.
  119.  *   NET_OPT_TYPE        - Get the socket type.
  120.  */
  121. #define    NET_OPT_DEBUG        0x0001        
  122. #define    NET_OPT_RESERVED_1    0x0002        
  123. #define    NET_OPT_REUSE_ADDR    0x0004        
  124. #define    NET_OPT_KEEP_ALIVE    0x0008        
  125. #define    NET_OPT_DONT_ROUTE    0x0010        
  126. #define    NET_OPT_BROADCAST    0x0020        
  127. #define    NET_OPT_USE_LOOPBACK    0x0040        
  128. #define    NET_OPT_LINGER        0x0080        
  129. #define    NET_OPT_OOB_INLINE    0x0100        
  130. #define NET_OPT_SEND_BUF_SIZE    0x1001        
  131. #define NET_OPT_RECV_BUF_SIZE    0x1002        
  132. #define NET_OPT_SEND_LOWAT    0x1003        
  133. #define NET_OPT_RECV_LOWAT    0x1004        
  134. #define NET_OPT_SEND_TIMEOUT    0x1005        
  135. #define NET_OPT_RECV_TIMEOUT    0x1006        
  136. #define    NET_OPT_ERROR        0x1007        
  137. #define NET_OPT_TYPE        0x1008
  138.  
  139. /*
  140.  * TCP socket options:
  141.  *
  142.  * NET_OPT_TCP_NO_DELAY        - don't delay sending data by trying to 
  143.  *                  coalesce packets.
  144.  * NET_OPT_TCP_MAX_SEG_SIZE    - maximum segment size.
  145.  *
  146.  * Note: the following values must agree with 4.3BSD's <netinet/tcp.h>
  147.  */
  148. #define NET_OPT_TCP_NO_DELAY        0x1
  149. #define NET_OPT_TCP_MAX_SEG_SIZE    0x2
  150.  
  151. /*
  152.  * Structure used for manipulating the NET_OPT_LINGER option.
  153.  */
  154. typedef struct    {
  155.     Boolean    onOff;        /* option on/off */
  156.     int    linger;        /* linger time */
  157. } Net_LingerInfo;
  158.  
  159.  
  160. /*
  161.  * Values for the flags data in the IOC_NET_RECV_INFO ioctl and
  162.  * the flags field in the Inet_SendInfo struct.
  163.  *
  164.  * NET_OUT_OF_BAND    next read wants out-of-band data or next send
  165.  *             has out-of-band data to send.
  166.  * NET_PEEK        next read wants to not consume the data in the 
  167.  *             read queue.
  168.  *
  169.  * Note: These values must match the MSG_ values defined in the 4.3BSD
  170.  * <sys/socket.h> file.
  171.  *
  172.  */
  173.  
  174. #define NET_OUT_OF_BAND        0x1
  175. #define NET_PEEK        0x2
  176.  
  177. /*
  178.  * Information sent to the inet server in the IOC_NET_SEND_INFO ioctl.
  179.  * It is used to send the flags and optionally, an address to send the
  180.  * data to. 
  181.  */
  182. typedef struct {
  183.     int    flags;            /* Defined above. */
  184.     Boolean    addressValid;    /* If TRUE, the address field is to be used. */
  185.     union {
  186.     Net_InetSocketAddr    inet; /* Where to send the data. */
  187.     /* 
  188.      * Other address family socket addresses go here...
  189.      */
  190.     } address;
  191. } Net_SendInfo;
  192.  
  193. /*
  194.  * Commands for IOC_NET_STATS ioctl. High-order 16 bits are interpreted
  195.  * as the stat dump file version number.
  196.  */
  197. #define NET_STATS_RESET    1
  198. #define NET_STATS_DUMP    2
  199.  
  200. #endif _NET_IOC
  201.